package com.chensi.controller;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.chensi.common.AjaxJson;
import com.chensi.common.Constants;
import com.chensi.common.Pager;
import com.chensi.model.Demo;
import com.chensi.service.IDemoService;
import com.chensi.util.BeanUtils;
import com.chensi.util.CommonUtil;
/**
 * @author chensi
 * @version 2016-7-9 下午3:02:32
 */
@Controller
@RequestMapping("demo")
public class DemoController {

	@Autowired
	private IDemoService demoService;
	
	/**
	 * 获取单个详情
	 * @param id 主键
	 * @return
	 */
	@RequestMapping("get")
	@ResponseBody
	public AjaxJson get(Integer id){
		return AjaxJson.getSuccessInfo(demoService.get(id));
	}
	
	/**
	 * 查询条件筛选（带分页）
	 * @param demo 对象
	 * @param pager
	 * @return
	 */
	@RequestMapping("page")
	@ResponseBody
	public AjaxJson page(Demo demo,Pager pager){
		return AjaxJson.getSuccessInfo(demoService.pageByEntity(demo, pager));
	}
	
	/**
	 * 查询所有（不带分页）==》通常用做下拉框元数据
	 * @return
	 */
	@RequestMapping("list")
	@ResponseBody
	public AjaxJson list(){
		return AjaxJson.getSuccessInfo(demoService.list());
	}
	
	/**
	 * 新增或更新
	 * @param demo 对象
	 * @return
	 */
	@RequestMapping("save")
	@ResponseBody
	public AjaxJson save(Demo demo){
		if(demo.getId()==null){
			if(StringUtils.isBlank(demo.getName())||demo.getStatus()==null){
				return AjaxJson.getFailInfo(Constants.NOT_BLANK);
			}
			//查询name重复
			Demo entity=new Demo();
			entity.setName(demo.getName());
			Demo tmp=demoService.getByEntity(entity);
			if(tmp!=null){
				return AjaxJson.getFailInfo("用户名已存在");
			}
			if(demo.getSort()==null){
				demo.setSort(demoService.getMaxSort());
			}
			demoService.save(demo);
		}else{
			//查询不同主键的name是否重复
			Demo entity=new Demo();
			entity.setName(demo.getName());
			entity.setIdNe(demo.getId());
			Demo tmp=demoService.getByEntity(entity);
			if(tmp!=null){
				return AjaxJson.getFailInfo("用户名已存在");
			}
			Demo old=demoService.get(demo.getId());
			BeanUtils.copyNotNullProperties(demo,old);
			if(old.getSort()==null){
				old.setSort(demoService.getMaxSort());
			}
			demoService.update(old);
		}
		return AjaxJson.getSuccessInfo();
	}
	
	/**
	 * 批量保存
	 * @param demoList （前端提交表单是demoList[0].name&demoList[0].status&demoList[1].name&demoList[1].status）
	 * @return
	 */
	@RequestMapping("saveAll")
	@ResponseBody
	public AjaxJson saveAll(Demo demo){
		List tmp=demo.getDemoList();
		if(CommonUtil.isEmptyList(tmp)){
			return AjaxJson.getFailInfo(Constants.NOT_BLANK);
		}
		//dto方式会传来空对象，去除空对象
		List<Demo> list=CommonUtil.getListIgnoreEmpty(tmp);
		demoService.saveAll(list);
		return AjaxJson.getSuccessInfo();
	}
	
	/**
	 * 持久删除
	 * @param id 主键
	 * @return
	 */
	@RequestMapping("remove")
	@ResponseBody
	public AjaxJson remove(Integer id){
		if(id==null){
			return AjaxJson.getFailInfo(Constants.NOT_BLANK);
		}
		demoService.remove(id);
		return AjaxJson.getSuccessInfo();
	}
	
	/**
	 * 持久删除（按条件）
	 * @param entity 对象 （此处假设接收对象参数是status）
	 * @return
	 */
	@RequestMapping("removeByEntity")
	@ResponseBody
	public AjaxJson removeByEntity(Integer status){
		if(status==null){
			return AjaxJson.getFailInfo(Constants.NOT_BLANK);
		}
		Demo entity=new Demo();
		entity.setStatus(status);
		demoService.removeByEntity(entity);
		return AjaxJson.getSuccessInfo();
	}
	
	/**
	 * 批量持久删除
	 * @param ids id数组（前端传  '1,2,3,4' 字符串即可）
	 * @return
	 */
	@RequestMapping("removeAll")
	@ResponseBody
	public AjaxJson removeAll(@RequestParam("ids") List<Integer> ids){
		if(CommonUtil.isEmptyList(ids)){
			return AjaxJson.getFailInfo(Constants.NOT_BLANK);
		}
		demoService.removeAll(ids);
		return AjaxJson.getSuccessInfo();
	}
}
